package cn.com.yto56.cainiao.exponent.plugin;

import cn.com.yto56.basic.framework.model.rest.BaseRequest;
import cn.com.yto56.basic.framework.plugin.chain.BaseExcutor;
import cn.com.yto56.basic.framework.plugin.chain.config.ExecutorRequest;

import java.io.Serializable;

/**
 * 转换插件基类
 */
public abstract class ExponentConvertPlugin<T extends Serializable, R extends BaseRequest> extends BaseExcutor<R, ExecutorRequest<T, R>> {
  public ExponentConvertPlugin() {

  }


  /**
   * 插件名称
   * @return
   */
  @Override
  public String executorName(){
    return "EXPONENT_PULL_PLUGIN";
  }


  /**
   * 摭呢类型
   * @return
   */
  protected abstract String extentionName();

  /**
   * 转换主体方法
   *
   * @param parameter
   * @return
   */
  protected abstract R convert(ExecutorRequest<T, R> parameter);

  @Override
  protected final R executeCore(ExecutorRequest<T, R> parameter) {
    convert(parameter);
    return parameter.getOutputParameter();
  }

}
